function Set(){//这是一个构造函数

	this.values={};//集合对象保存在对象的属性里面
	this.counts=0;//集合中值得个数
	this.add.apply(this,arguments);//把所有参数都添加进这个集合里面
}
Set.prototype.add=function(){
	for (var i = 0; i < arguments.length; i++) {
		var val=arguments[i];
		var str=Set._v2s(val);
		if (!this.values.hasOwnProperty(str)) {
			this.values[str]=val;//将字符串和值对应起来
			this.counts++;
		}
	}
	return this;//支持链式方法调用
	
	
}
Set.prototype.remove=function(){
for (var i = 0; i < arguments.length ; i++) {
	var str = Set._v2s(arguments.length [i]);
	if (this.values.hasOwnProperty(str)) {
		delete this.values[str];
		this.counts--;
	}
}
return;
}
Set.prototype.contains=function(value){
	return this.values.hasOwnProperty(Set._v2s(value));	
}
Set.prototype.size=function(){
	return this.counts;
}
Set.prototype.foreach=function(f,context)
{
	
	for (var s in this.values) {
		if (this.values.hasOwnProperty(s)) {
			f.call(context,this.values[s]);
		}
	}
	
}

Set._v2s=function(val){
	switch (val){
		case undefined:
		return 'underfined';
			case null:
		return 'null';
			case true:
		return 'true';
			case false:
		return 'false';
		default:switch (typeof val){
			case 'number': return 'number';			
				case 'string': return 'string';			
			default:
			return '@'+objectId(val);
				break;
		}
			break;
	}
	
}
function objectId(o)
{
	var prop="|**objectid**|";
	if (!o.hasOwnProperty(prop)) {
		o[prop]=Set._v2s.next++;
		return o[prop];
	}
	
}
Set._v2s.next=100;//设置初始Id的值
